package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)

func MyWrite(filePath string, content string, mode int) {
	/*
		    == 同一种模式标志不能混用，但可以与其他不同的模式标志一起使用 ==
			打开模式标志：
				os.O_RDONLY：只读模式（默认）。
				os.O_WRONLY：只写模式。
				os.O_RDWR：读写模式。
			创建 / 覆盖标志：
				os.O_CREATE：如果文件不存在，则创建它。
				os.O_TRUNC：打开时清空文件内容（与O_CREATE结合时常用）。
				os.O_EXCL：与O_CREATE配合使用时，若文件已存在则返回错误（用于避免意外覆盖）。
			追加 / 位置标志：
				os.O_APPEND：写入时追加到文件末尾。
				os.O_SYNC：同步写入（确保数据物理写入磁盘）。
			其他标志：
				os.O_DSYNC：同步写入（仅元数据）。
				os.O_NOFOLLOW：不追踪符号链接。
				os.O_CREATE|os.O_EXCL：创建新文件，若已存在则报错。
	*/
	fileObj, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println("打开文件失败")

	}
	defer fileObj.Close()
	switch {
	case mode == 1:
		// 方法1：通过字节形式写入
		_, err = fileObj.Write([]byte(content)) // n1：文件写入大小
		fmt.Println("以字节写入ok")
	case mode == 2:
		// 方法2：直接写入字符串
		_, err = fileObj.WriteString(content)
		fmt.Println("以字符串写入ok")
	}
}

func MyWriterBybufio(filePath string, context string) {
	// 文件不存在则创建文件，可读可写，覆盖
	fileObj, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644)
	if err != nil {
		fmt.Println("文件打开异常", err)
		return
	}
	defer fileObj.Close()
	writer := bufio.NewWriter(fileObj)
	_, _ = writer.WriteString(context) // 将内容写入缓冲区
	_ = writer.Flush()                 // 刷新磁盘
	fmt.Println("写入ok")
}

// 不建议
func MyWriterIouti(filePath string, context string) {
	fileObj, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644)
	if err != nil {
		fmt.Println("文件打开失败", err)
		return
	}
	defer fileObj.Close()
	err2 := ioutil.WriteFile(filePath, []byte(context), 0644)
	if err2 != nil {
		fmt.Println("文件写入失败", err)
		return
	}
	fmt.Println("文件写入ok")
}

func main() {
	context := "生活的絮语\n清晨的阳光斜斜地透过窗户，在地板上洒下一道金边。我望着那抹光亮，忽然想起外婆家老窗棂上的光影，总是随着日头变换出不同的模样。生活就像这流动的光线，看似寻常，却藏着无数令人心动的瞬间。\n街边的梧桐树又开始飘絮，毛茸茸的白色小伞在风中打着旋儿，沾在行人肩头，惹得人忍不住伸手去拂。这些轻盈的絮状物，如同生活中不经意的小插曲，或许会带来些许困扰，却也让平淡的日子多了几分趣味。就像雨天里被淋湿的裤脚，虽然狼狈，可当雨水顺着伞骨滴落，在水洼里溅起晶莹的水花时，又会觉得这也是独属于雨天的浪漫。\n深夜伏案工作时，窗外的月光悄悄爬上书桌，台灯的暖光与月光交织，给枯燥的文字都镀上了一层温柔。疲惫时望向夜空，繁星点点，突然意识到，再忙碌的生活，也总会有这样宁静美好的时刻可以治愈心灵。\n生活从不是一成不变的剧本，那些突如其来的意外，那些琐碎平凡的日常，拼凑在一起，才构成了独一无二的人生。或许我们不必执着于追逐远方的宏大，因为美好就藏在每个当下，藏在晨起的一杯温水里，藏在与老友的相视一笑中，藏在每一个认真生活的瞬间里。\n"
	//MyWrite("./basicDemo/data/MyWrite.txt", context, 2)
	//MyWriterBybufio("./basicDemo/data/MyWrite.txt", context)
	MyWriterIouti("./basicDemo/data/MyWrite.txt", context)
}
